#ifndef NODE_H
#define NODE_H


#include <string>
#include <iostream>
#include <vector>

using namespace std;

/*
===============================================================================
 Name        : Node.h
 Author      : Bram en Paul
 Version     : 1.0
 Description : Deze klasse is een abstracte. Nodes zijn 'gates' uit digitale 
			   techniek zoals AND en NOT. 
===============================================================================
*/

class Node
{
	protected:
		//Constructor for factory object
		Node(string ID);
		char completed;
		vector<Node*> outputs; 
		vector<char> inputs;
		char outputValue;


	public:
		//Regular constructor
		Node();

		//Member functions
		void addInput(char Input);
		void addOutput(Node* Output);
		void sendOperationResult();
		char isFinished();
		
		//Non-inheritable functions
		virtual void operation();
		virtual void checkInputQuantity() = 0;
		virtual char isInput();
		virtual Node* clone() = 0;

		//Destructor
		virtual ~Node();
};

#endif
